Zig (язык программирования)

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Zig
Тип исполнения Компилируемый
Автор Andrew Kelley
Расширение файлов .zig
Выпуск 0.9.1 (14 февраля 2022; 2 года назад (2022-02-14))
Система типов Статическая, строгая
Лицензия MIT
Сайт ziglang.org

Zig — это императивный, статически типизированный, компилируемый, язык программирования общего назначения[1][2]. Язык был спроектирован для создания «надёжного, оптимального и поддерживаемого» (англ. robustness, optimality and maintainability) программного обеспечения[3][4]. Язык поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[5]. Главная цель языка — конкурировать c (и стать лучше) C[6][7], в то же время заимствуя некоторые идеи из Rust[8].

Язык имеет много средств для низкоуровневого программирования, особенно: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (например: i7, i8, i63)[9], несколько типов указателей[10].

Компилятор написан на самом языке, а также на C++. LLVM 12[11] используется в качестве бэкэнда компилятора[12][13]. Компилятор лицензирован под свободной лицензией MIT[13]. Компилятор имеет возможность компилировать C и C++ программы, с помощью команд «zig cc» и «zig c++»[14]. Язык программирования Nim поддерживает использование компилятора Zig, как C компилятора.

Примеры кода

Hello World

const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    try stdout.print("Hello, {}!\n", .{"world"});
}

Обобщённый связный список

fn LinkedList(comptime T: type) type {
    return struct {
        pub const Node = struct {
            prev: ?*Node,
            next: ?*Node,
            data: T,
        };

        first: ?*Node,
        last:  ?*Node,
        len:   usize,
    };
}

pub fn main() void {
    var node = LinkedList(i32).Node {
        .prev = null,
        .next = null,
        .data = 1234,
    };

    var list = LinkedList(i32) {
        .first = &node,
        .last = &node,
        .len = 1,
    };
}

Примечания

  1. "Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot" (англ.) ?. JAXenter (31 октября 2017). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
  2. Tired of C? New programming language Zig aims to be more pragmatic and readable (англ.) ?. JAXenter (19 октября 2017). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
  3. Serdar Yegulalp. New challenger joins Rust to topple C language (англ.). InfoWorld (29 августа 2016). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
  4. IT之家. 想替代 C 的 Zig 语言成立了基金会. tech.sina.com.cn (12 июля 2020). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
  5. The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 1 апреля 2022 года.
  6. Mozilla’s Observatory, the Zig programming language, and uSens’ VR/AR SDK—SD Times news digest: Aug. 29, 2016 (англ.) ?. SD Times (29 августа 2016). Дата обращения: 21 сентября 2020. Архивировано 25 ноября 2021 года.
  7. The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 1 апреля 2022 года.
  8. Unsafe Zig is Safer Than Unsafe Rust - Andrew Kelley. andrewkelley.me. Дата обращения: 21 сентября 2020. Архивировано 21 февраля 2022 года.
  9. Keen to go _ExtInt? LLVM Clang compiler adds support for custom width integers (англ.). www.theregister.com. Дата обращения: 21 сентября 2020. Архивировано 26 октября 2020 года.
  10. Documentation - The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 31 марта 2022 года.
  11. SD Times news digest: C++20 concepts in Visual Studio 2010 version 16.3, Bootstrap to drop IE support, and Zig 0.60 released (англ.) ?. SD Times (14 апреля 2020). Дата обращения: 21 сентября 2020. Архивировано 25 ноября 2021 года.
  12. A Reply to _The Road to Zig 1.0_ (неопр.). www.gingerbill.org (13 мая 2019). Дата обращения: 21 сентября 2020. Архивировано 7 сентября 2021 года.
  13. 13,0 13,1 ziglang/zig. — 2020-09-21. Архивировано 30 марта 2022 года.
  14. 0.6.0 Release Notes · The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 21 февраля 2022 года.

Ссылки